﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Class 对象 - 方法 &amp; 属性 | AutoHotkey v2</title>
<meta name="description" content="A Class object represents a class definition; it contains static methods and properties." />
<meta name="ahk:equiv-v1" content="AutoHotkey.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>Class 对象</h1>
<pre class="NoIndent">class Class extends Object</pre>

<p><strong>Class(类)</strong> 对象表示一个类定义; 它包含静态方法和属性.</p>
<p>每个类对象都<a href="../Objects.htm#Custom_Objects">基于</a>其继承的任何类, 如果没有指定, 则基于 <a href="Object.htm">Object</a>. <code>Object</code> 基于 <code>Class.Prototype</code>, 其又基于 <code>Object.Prototype</code>, 因此类可以从任何这些基对象继承方法和属性.</p>
<p>"静态" 方法和属性是类对象本身拥有的任何方法和属性(因此不适用于特定实例), 而类实例的方法和属性则由<a href="#Prototype">原型</a>拥有.</p>
<p>下面使用 "ClassObj"  作为任何类对象的占位符, 因为 "Class" 就是类本身. 通常, 使用<a href="../Objects.htm#Custom_Classes">类定义</a>中给出的名称来引用类对象.</p>

<h2 id="toc">目录</h2>
<ul class="indent">
  <li><a href="#Methods">方法</a>:
    <ul>
      <li><a href="#Call">Call</a>: 构造类的新实例.</li>
    </ul>
  </li>
  <li><a href="#Properties">属性</a>:
    <ul>
      <li><a href="#Prototype">Prototype</a>: 检索或设置对象, 其类的所有实例都基于此.</li>
    </ul>
  </li>
</ul>

<h2 id="Methods">方法</h2>

<div class="methodShort" id="Call"><h3>Call</h3>
<p>构造类的新实例.</p>
<pre class="Syntax">Obj := ClassObj(Params*)
Obj := ClassObj.<span class="func">Call</span>(Params*)</pre>
<p>静态方法通常从 <a href="Object.htm">Object</a>, <a href="Array.htm">Array</a> 或 <a href="Map.htm">Map</a> 类继承. 它执行以下功能:</p>
<ul>
  <li>分配内存并初始化对象的二进制结构, 这取决于对象的原生类型(例如, 它是数组还是映射, 或者只是一个对象).</li>
  <li>将新对象的基设置为 <a href="#Prototype">ClassObj.Prototype</a>.</li>
  <li>如果新对象有 __Init 方法, 则调用它的 __Init 方法. 此方法由类定义自动创建; 它包含类主体中定义的所有实例变量初始化器.</li>
  <li>如果新对象有 __New 方法, 则调用它的 __New 方法. 所有传递给 Call 的参数都被转发到 __New.</li>
  <li>返回新对象.</li>
</ul>
<p>Call 可以被通过定义静态方法(如 <code>static Call()</code>) 在类定义中重写. 这允许修改类或阻止构造新实例.</p>
<p>注意, <code>Class()</code>(在这种情况下使用原义的 "Class") 可用于构造基于 <code>Class.Prototype</code> 的新的 Class 对象. 但是, 新对象最初没有 Call 方法, 因为它不是 <a href="Object.htm">Object</a> 的子类. 通过给 <a href="Object.htm#Base">Base</a> 赋值使其成为 Object 的子类, 或 Call 方法重新实现或从其他类中复制. 在使用标准的 Call 方法实例化原型之前, 还必须创建原型并将其赋值给该类.</p>
</div>

<h2 id="Properties">属性</h2>

<div class="methodShort" id="Prototype"><h3>Prototype</h3>
<p>检索或设置类的所有实例所基于的对象.</p>
<pre class="Syntax">Proto := ClassObj.<span class="func">Prototype</span></pre>
<pre class="Syntax">ClassObj.<span class="func">Prototype</span> := Proto</pre>
<p>默认情况下, 类的原型包含类定义中定义的所有实例方法和动态属性, 可用于检索对方法, 或 getters/setters 属性的引用, 或定义一个新的. 脚本还可以定义新的值属性, 这些值充当所有实例的默认属性值.</p>
<p>类的 Prototype 通常基于其基类的 Prototype, 所以 <code>ClassObj.Prototype.base == ClassObj.base.Prototype</code>.</p>
<p>原型自动被定义为类定义创建的任何类对象的自身属性.</p>
</div>

</body>
</html>